package com.tbit.uqbike.webmanager.dao.core.tag;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.tbit.config.datasource.DataSource;
import com.tbit.uqbike.enums.TagBindStatus;
import com.tbit.uqbike.object.pojo.tag.MachineTag;
import com.tbit.uqbike.service.business.tag.UpdateBindStatusReq;
import com.tbit.uqbike.webmanager.req.tag.bind.QueryBindListReq;
import com.tbit.uqbike.webmanager.resp.tag.TagBindListResp;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.List;
import java.util.Set;

/**
 * MachineTag 数据访问层
 *
 *
 * @author <a href="mailto:chen.chaoxiong@tbit.com.cn">ChenChaoXiong</a>
 * @since 2024/7/8
 */
@DS(DataSource.CORE)
public interface MachineTagDao {

    /**
     * 根据车辆ID列表和标签ID列表查询标记中(bindStatus=1)的MachineTag
     *
     * @param machineIds
     * @param tagIds
     * @return
     */
    List<MachineTag> selectTagedListByMachineIdsAndTagIds(@Param("machineIds") Set<Integer> machineIds,@Param("tagIds") Set<Long> tagIds);

    List<MachineTag> selectByIds(Collection<Long> ids);

    int insertBatch(List<MachineTag> machineTags);

    int insert(MachineTag machineTag);

    List<TagBindListResp> selectList(QueryBindListReq req);

    int updateBatchByids(@Param("reqs") List<UpdateBindStatusReq> reqs);


    int updateStatusById(@Param("req") UpdateBindStatusReq req);

    int updateStatusByMachineId(@Param("req") UpdateBindStatusReq req);

    int updateStatusByTagId(@Param("req") UpdateBindStatusReq req);

    Set<Integer> selectUniqueMachineIdsByTagIds(@Param("tagIds") Set<Long> tagId);
    Set<Integer> selectUniqueMachineIdsByIds(@Param("ids") Set<Long> ids);
    int deleteByMachineIds(@Param("machineIds") List<Integer> machineIds);

    List<TagBindListResp> selectAll(List<Integer> ids);
}
